public class Simbolo implements Comparable<Simbolo>
{
    //Clase de simbolos
    public static final int
			VAR = 1,
			METODO = 2,
			CLASE = 3,
            INDICE = 4;

    public static final int
			ENTERO = 1,
			REAL = 2;

    public String nombre;
    public int tipoSimbolo;
    public int tipo;
    public int id;
    public boolean inicializado;

    // Tipos de datos:

    private boolean usado;
    private String cuerpo;

    public Simbolo(String nombre, int tipoSimbolo, int tipo, int id)
    {
        this.nombre = nombre;
        this.tipoSimbolo = tipoSimbolo;
        this.tipo = tipo;
        this.id = id;
        this.inicializado = false;
    }

    public Simbolo(String nombre, int tipoSimbolo, String cuerpo)
    {
        this.nombre = nombre;
        this.tipoSimbolo = tipoSimbolo;
        this.cuerpo = cuerpo;
        this.inicializado = false;
    }

    public void setUsado()
    {
            usado = true;
    }

    public String ToString(String s)
    {
        if (usado && tipoSimbolo == VAR)
        {
            if (tipo == ENTERO)
            {
                return s + "int " + nombre + ";\n";
            }
            if (tipo == REAL)
            {
                return s + "double " + nombre + ";\n";
            }
        }
        if (usado && tipoSimbolo == METODO)
        {
            return s + cuerpo;
        }
        return "";
    }

        public void inicializar()
    {
        this.inicializado = true;
    }

    public boolean isInicializado()
    {
        return this.inicializado;
    }

    public String ToString(int nivel)
    {
        String s = "";
        for (int i = 0; i < nivel*4; i++)
        {
            s += ' ';
        }
        if (usado && tipoSimbolo == VAR)
        {
            if (tipo == ENTERO)
            {
                return s + "int " + nombre + ";\n";
            }
            if (tipo == REAL)
            {
                return s + "double " + nombre + ";\n";
            }
        }
        if (usado && tipoSimbolo == METODO)
        {
            return s + cuerpo;
        }
        return "";
    }

    public void setCuerpo (String cuerpo)
    {
            this.cuerpo = cuerpo;
    }

    public boolean isArray()
    {
        return ( this.tipo > 3 );
    }

    public int compareTo(Simbolo s)
    {
        if ( this.id == s.id )
            return 0;
        else if ( this.id > s.id )
            return 1;
        else
            return -1;
    }

}

